[INV-BACKEND-033] Создать метод MergeInventoryItems()

Реализация транзакционного метода слияния (Merge) партий в СУБД

Author

Services Task & Simulation Framework Documentation

Published

July 13, 2026

NoteКраткая карточка задачи

  • Инструкция по шагам:
    1. На Шаге 7–8: Принять команду объединения от шлюза. Открыть строгую изолированную ACID-транзакцию в PostgreSQL Fridge DB во избежание Race Condition (если пользователь параллельно пытается съесть одну из этих партий).
    2. Выполнить математическое агрегирование: рассчитать суммарный вес всех указанных в списке записей через SUM(weight_grams). Извлечь самую раннюю дату зачисления через MIN(created_at).
    3. Бизнес-правило сохранения FIFO-индекса: Удалить все старые строки из таблицы fridge_inventory, входящие в item_ids_list. Выполнить INSERT одной итоговой объединенной строки, присвоив ей суммарный вес и строго зафиксировав извлеченную на предыдущем шаге минимальную (раннюю) дату created_at (чтобы объединенный продукт честно остался в начале очереди на списание).
    4. Зафиксировать транзакцию (COMMIT) и вернуть шлюзу ответ HTTP 200 OK.
    5. На Шаге 10: Опубликовать в топик bpds.pma.out.process.event пакет с метаданными: event_type: "MERGE", список схлопнутых ID, итоговый вес и сквозной x_request_id.